import type { IWhitelistConfig } from './types'

/**
 * 应用白名单配置模块
 * 统一管理我们应用中实际存在的功能模块
 */

/**
 * 应用白名单 - 我们应用中实际存在的功能模块
 */
export const APP_WHITELIST = [
  '工作经历',
  '家庭成员',
  '学习经历',
  '人员档案',
  '档案补录',
  '访客中心',
  '活动中心',
  '人员履历',
  '荣誉职称',
  '待办中心',
  '消息通知',
  '用人申请',
  '招聘申请',
  '招聘中心',
  '招聘发布',
  '辞退处理',
  '退休办理',
  '离职办理',
  '请假出差',
  '调休申请',
  '替班申请',
  '换班申请',
  '加班申请',
  '转正申请',
  '合同续签',
  '调岗调薪',
  '应聘申请',
  '入职申请',
  '自由排班',
]

/**
 * 应用白名单配置 - 包含文本名称和对应的页面路径
 */
export const APP_WHITELIST_CONFIG: IWhitelistConfig[] = [
  {
    text: '工作经历',
    path: '/subpkg-hr/hr/employee/work'
  },
  {
    text: '家庭成员',
    path: '/subpkg-hr/hr/employee/family'
  },
  {
    text: '学习经历',
    path: '/subpkg-hr/hr/employee/education'
  },
  {
    text: '人员档案',
    path: '/subpkg-hr/hr/employee/detail'
  },
  {
    text: '档案补录',
    path: '/subpkg-hr/hr/Supplementation/index'
  },
  {
    text: '访客中心',
    path: '/subpkg-visitor/visitor/index'
  },
  {
    text: '活动中心',
    path: '/subpkg-activity/activity/sysactivitylist/index'
  },
  {
    text: '人员履历',
    path: '/subpkg-hr/hr/employee/resume'
  },
  {
    text: '荣誉职称',
    path: '/subpkg-hr/hr/employee/honor'
  },
  {
    text: '待办中心',
    path: '/subpkg-todocenter/index'
  },
  {
    text: '消息通知',
    path: '/subpkg-sysnotification/index'
  },
  {
    text: '用人申请',
    path: '/subpkg-hr-syshrstaffneedrequestbill/index'
  },
  {
    text: '招聘申请',
    path: '/subpkg-hr-syshrrecruitrequestbill/index'
  },
  {
    text: '招聘中心',
    path: '/subpkg-hr-syshrrecruitpublishrequestbill/index'
  },
  {
    text: '招聘发布',
    path: '/subpkg-hr-syshrrecruitpublishrequestbill-zpfb/index'
  },
  {
    text: '辞退处理',
    path: '/subpkg-hr-syshrdismissrequestbill/index'
  },
  {
    text: '退休办理',
    path: '/subpkg-hr-syshrretirerequestbill/index'
  },
  {
    text: '离职办理',
    path: '/subpkg-hr-syshrresignrequestbill/index'
  },
  {
    text: '请假出差',
    path: '/subpkg-hr-sysdailyleaverequestbill/index'
  },
  {
    text: '调休申请',
    path: '/subpkg-hr-sysdailycompoffrequestbill/index'
  },
  {
    text: '替班申请',
    path: '/subpkg-hr-sysdailysubstitutionrequestbill/index'
  },
  {
    text: '换班申请',
    path: '/subpkg-hr-sysdailyshiftswaprequestbill/index'
  },
  {
    text: '加班申请',
    path: '/subpkg-daily-sysdailyovertimerequestbill/index'
  },
  {
    text: '转正申请',
    path: '/subpkg-hr-syshrprobationrequestbill/index'
  },
  {
    text: '合同续签',
    path: '/subpkg-hr-syshrrenewrequestbill/index'
  },
  {
    text: '调岗调薪',
    path: '/subpkg-hr-syshrtransferrequestbill/index'
  },
  {
    text: '应聘申请',
    path: '/subpkg-hr-syshrinterviewrequestbill/index'
  },
  {
    text: '入职申请',
    path: '/subpkg-hr-syshronboardingrequestbill/index'
  },
  {
    text: '自由排班',
    path: '/subpkg-hr-sysattendancerecord/index'
  },
]

/**
 * 根据菜单文本获取白名单配置中的单个路径
 * @param menuText 菜单文本
 * @returns 返回对应的路径，如果不存在则返回 undefined
 */
export const getWhitelistPath = (menuText: string): string | undefined => {
  const config = APP_WHITELIST_CONFIG.find(item => item.text === menuText)
  return config?.path
}

/**
 * 根据菜单文本获取白名单配置中的路径信息（返回数组格式，向后兼容）
 * @param menuText 菜单文本
 * @returns 返回对应的路径配置，如果不存在则返回 undefined
 */
export const getWhitelistPaths = (menuText: string): string[] | undefined => {
  const config = APP_WHITELIST_CONFIG.find(item => item.text === menuText)
  return config?.path ? [config.path] : undefined
}

/**
 * 获取所有白名单配置
 * @returns 返回完整的白名单配置
 */
export const getAllWhitelistConfig = (): IWhitelistConfig[] => {
  return APP_WHITELIST_CONFIG
}

/**
 * 检查菜单项是否在白名单中
 * @param menuText 菜单文本
 * @returns 是否在白名单中
 */
export const isInWhitelist = (menuText: string): boolean => {
  return APP_WHITELIST.includes(menuText)
}

/**
 * 分析白名单配置的统计信息
 * @returns 返回白名单配置的统计信息
 */
export const analyzeWhitelistConfig = () => {
  return {
    totalCount: APP_WHITELIST.length,
    configCount: APP_WHITELIST_CONFIG.length,
    isConsistent: APP_WHITELIST.length === APP_WHITELIST_CONFIG.length,
    missingConfigs: APP_WHITELIST.filter(text =>
      !APP_WHITELIST_CONFIG.some(config => config.text === text)
    ),
    extraConfigs: APP_WHITELIST_CONFIG.filter(config =>
      !APP_WHITELIST.includes(config.text)
    )
  }
}
